#ifndef __estructures_h__ 


#include <stdlib.h>
#include <stdio.h>

#define MAX_ELEM 50
#define MAX_C3A 30
#define MAX_LINES_C3A 200
#define MAX_ELEM_LIST 20


/* Activation Bloc */


typedef struct
{
	int posicio;		/*posicio que ocupa dins del BA*/
	char desc[20]; 		/*descripcio*/
	int mida;		/*mida que ocupa dins del BA*/
}Node_ba;

typedef struct
{
	int elements;
	int next_element;
	int first_element;
	int last_element;
	int parameters;  	/*indica la posicio on comencen ha haver parametres*/
	int data;		/*index que indica la posicio on comencen ha haver dades*/
	int posMemLliure; /* primera posicio de memoria virtual lliure */
	Node_ba llista_elem[MAX_ELEM];	
	char nom[20];
	int type;
	int tmp_var;
}activation_bloc;


/*-----------C3A  ---------------------*/
typedef char Node_c3a [MAX_C3A];


/*  top_stack  -->	4  element 5
  				3  element 4
    read_stack --> 	2  element 3
  			   	1  element 2
  				0  element 1
*/
typedef struct
{
	int top_list;
	int read_list;
	int file_list;
	int pos_inici; /* indica la posicio a partir de la qual comença la
				   nova funció.(segment + despl)
				*/
	int c3a_line;
	Node_c3a codi[MAX_LINES_C3A];
}Code_list;

/* ------ Back-Patching ----- */

typedef int Tlist_int[MAX_ELEM_LIST];

typedef struct
{
 Tlist_int llista;
 int num;
}Tlist;

typedef struct
{
 char value[10];
 int linia;
}Node_bin;

typedef Node_bin Tlist_bin[MAX_ELEM_LIST];

typedef struct tlist_binary
{
 Tlist_bin llista;
 int num;
}Tlist_binary;


typedef struct tinfo{
 int test;
 int def;
 int quad;
 Tlist * lls;
 Tlist * llc;
 Tlist * llf;
 Tlist_binary * cua;
}Tinfo;

typedef struct
{
 int first_elem;
 int last_elem;	
 int read_elem;
 Tlist_int list;
}BP_list_int;
#define __estructures_h__ 
#endif /*__estructures_h__ */
